package com.wujing.scalatrait


/**
 *
 * 动态混入
 *
 * 带有特质的 动态混入
 * 不声明的情况下，拓展类的功能
 * 可以在不影响原有的基础上，给指定的类拓展特质
 */
object TraitDemo01 {
  def main(args: Array[String]): Unit = {
    //在不修改类的基础上，使用trait 的方法
    val db = new OrcaleDb with Operate01
    db.insert(100)

    val mysqlDb = new MysqlDb with Operate01
    mysqlDb.insert(100)

    val mysqlDb01 = new MysqlDb01 with Operate01 {
      override def say(): Unit = {
        println("实例自己的抽象方法")
      }
    }
    mysqlDb01.say()
    mysqlDb01.insert(50)
  }
}

trait Operate01{
  /**
   * 默认实现的方法
   * @param id
   */
  def insert(id:Int): Unit ={
    println("插入数据=="+id)
  }
}

class OrcaleDb{}

abstract class MysqlDb{}

abstract class MysqlDb01{
  def say()
}

